﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace ImageStationNumAdapt
{
    public static class FileSystemItemComparer
    {

        [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
        private static extern int StrCmpLogicalW(string x, string y);

        /// <summary>
        /// 自定义比较器，模拟Windows资源管理器的自然排序
        /// </summary>
        public class FileSystemComparer : IComparer<FileSystemInfo>
        {
            public int Compare(FileSystemInfo x, FileSystemInfo y)
            {
                // 1. 将文件夹和文件分开处理
                if (x is DirectoryInfo && y is FileInfo)
                    return -1; // 文件夹在文件之前
                if (x is FileInfo && y is DirectoryInfo)
                    return 1;  // 文件在文件夹之后

                // 2. 相同类型时进行自然排序比较
                return StrCmpLogicalW(x.Name, y.Name);
            }
        }

        /// <summary>
        /// 获取按资源管理器方式排序的文件系统条目
        /// </summary>
        public static List<FileSystemInfo> GetSortedFileSystemEntries(string folderPath)
        {
            var list = new List<FileSystemInfo>();

            try
            {
                var directory = new DirectoryInfo(folderPath);

                // 获取所有子目录（仅第一级）
                foreach (var dir in directory.EnumerateDirectories())
                    list.Add(dir);

                // 获取所有文件（仅第一级）
                foreach (var file in directory.EnumerateFiles())
                    list.Add(file);

                // 使用自定义比较器排序
                list.Sort(new FileSystemComparer());
            }
            catch (Exception ex)
            {
                Console.WriteLine($"错误: {ex.Message}");
            }

            return list;
        }
    }
}
